package main

import "strconv"

/**
101. 对称二叉树
给定一个二叉树，检查它是否是镜像对称的。



例如，二叉树 [1,2,2,3,4,4,3] 是对称的。

    1
   / \
  2   2
 / \ / \
3  4 4  3


但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:

    1
   / \
  2   2
   \   \
   3    3

*/

//type TreeNode struct {
//	Val   int
//	Left  *TreeNode
//	Right *TreeNode
//}

func isSymmetric(p *TreeNode) bool {
	var sArr1 []string
	var sArr2 []string
	PreAfrecursionTree(p, &sArr1, 1)
	PreAfrecursionTree(p, &sArr2, 2)
	if len(sArr1) != len(sArr2) {
		return false
	}

	for i := 0; i < len(sArr1); i++ {
		if sArr1[i] != sArr2[len(sArr1)-1-i] {
			return false
		}
	}
	return true
}

func PreAfrecursionTree(root *TreeNode, str *[]string, reType int) {
	if root == nil {
		*str = append(*str, "nil")
		return
	}
	if reType == 1 {
		*str = append(*str, strconv.Itoa(root.Val))
	}
	PreAfrecursionTree(root.Left, str, reType)
	PreAfrecursionTree(root.Right, str, reType)
	if reType == 2 {
		*str = append(*str, strconv.Itoa(root.Val))
	}
}
